package com.reflect;

import java.lang.reflect.Method;
import java.util.ArrayList;

/**
 * 反射的作用：绕过编译阶段为集合添加元素
 */

public class reflectFuntionDemo1 {
    public static void main(String[] args) throws Exception {
        ArrayList<String> list=new ArrayList();
        ArrayList<Integer> list1=new ArrayList();
        //得到编译后的class对象
        System.out.println(list.getClass()==list1.getClass());
        //true 说明编译后ArrayList集合中的元素类型都转为了Arraylistl类型

        Class c=list1.getClass();
        Method add = c.getDeclaredMethod("add", Object.class);
        Boolean heima = (Boolean) add.invoke(list1, "黑马");
        System.out.println(heima);
        System.out.println(list1);
        //true
        //true
        //[黑马]


        //实现绕过编译阶段为集合添加元素的方式二:可以将泛式的ArrayList集合赋值给没有泛型的ArrayList集合，
        // 然后就相当于一个地址指向两个集合，这样就可以在没有泛式的集合中加入任意的元素
        ArrayList list2=list;
        list2.add(10);
        System.out.println(list);



    }
}
